# 导入常用的包
import numpy as np
import matplotlib.pyplot as plt

# -------------  1.直线------------
# 生成-1 到 1 的随机数，一共 100 个，这些数据是平均分布的
# 定义 x 轴的数据
# x = np.linspace(-1,1,100)
# print(x)
# # 定义 y 轴的数据
# plt.plot(x,y)
# # 显示图像
# plt.show()

# ------------- 2. 画布figure------------------------
# x = np.linspace(-1,1,100)
# y1 = 2*x + 1
# y2 = x**2
# plt.figure(2,figsize=(5,5))
# plt.plot(x,y1)
# plt.plot(x,y2)
# plt.show()


# 3、在一张画布中画两条线，同时可以设置线的颜色，宽度，和风格
# import numpy as np
# import matplotlib.pyplot as plt
# x = np.linspace(-1,1,100)
# y1 = x * 2 + 0.5
# y2 = x ** 2
# # color:表示设置线的颜色
# # linewidth:表示设置线的宽度
# # linestyle:表示设置线的风格
# plt.figure(figsize=(2,2))
# plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--')
# plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')
# plt.show()

# 4、限制 x 轴，y 轴的显示范围，为 x 轴和 y 轴添加描述，替换 x 轴和 y 轴的显示信息
# import numpy as np
# import matplotlib.pyplot as plt
# x = np.linspace(-3,3,100)
# y1 = x * 2 + 0.5
# y2 = x ** 2
# plt.figure(figsize=(6,6))
# plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--')
# plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')
# # 限制 x 轴的显示范围
# plt.xlim((-1,2))
# # 限制 y 轴的显示范围
# plt.ylim((-1,5))
# # 给 x 轴加描述
# plt.xlabel("xxxxxx")
# # 给 y 轴加描述
# plt.ylabel("yyyyyy")
# # 替换一下横坐标的显示
# temp = np.linspace(-2,2,11)
# plt.xticks(temp)
# # 替换纵坐标的标签，用 level0 代替之前的-1
# plt.yticks([-1,0,1,2,3,4,5],
# ["level0","level1","level2","level3","level4","level5","level6"])
# plt.show()

# 5、对边框进行设置，调整 x 轴和 y 轴的位置
# import numpy as np
# import matplotlib.pyplot as plt
# x = np.linspace(-3,3,100)
# y1 = x * 2 + 0.5
# y2 = x ** 2
# plt.figure(figsize=(6,6))
# plt.plot(x,y1,color='r',linewidth=1.0,linestyle='--')
# plt.plot(x,y2,color='b',linewidth=5.0,linestyle='-')
# # 限制 x 轴的显示范围
# plt.xlim((-1,2))
# # 限制 y 轴的显示范围
# plt.ylim((-1,5))
# # 给 x 轴加描述
# plt.xlabel("xxxxxx")
# # 给 y 轴加描述
# plt.ylabel("yyyyyy")
# # 替换一下横坐标的显示
# temp = np.linspace(-2,2,11)
# plt.xticks(temp)
# # 替换纵坐标的标签，用 level0 代替之前的-1
# plt.yticks([-1,0,1,2,3,4,5],
# ["level0","level1","level2","level3","level4","level5","level6"])
#
# # 获取边框
# ax = plt.gca()
# # 设置右边框的颜色为红色
# ax.spines["right"].set_color("r")
# # 去掉上边框
# ax.spines["top"].set_color(None)
#
# # 把 x 轴的刻度设置为 bottom
# ax.xaxis.set_ticks_position("bottom")
# # 把 y 轴的客户设置为 left
# ax.yaxis.set_ticks_position("left")
# # 设置 x 和 y 交汇的点，x 轴是 0，y 是也是 0，也就是 x 轴和 y 轴的都是 0 点交汇
# #ax.spines["bottom"].set_position(("data",0))
# #ax.spines["left"].set_position(("data",0))
#
# plt.show()

# 6.为画布添加图例
# import numpy as np
# import matplotlib.pyplot as plt
# x = np.linspace(-3, 3, 100)
# y1 = x * 2 + 0.5
# y2 = x ** 2
# plt.figure(figsize=(6, 6))
# # 首先要为两条线分别取名，这里的逗号必须要有
# l1, = plt.plot(x, y1, color='r', linewidth=1.0, linestyle='--')
# l2, = plt.plot(x, y2, color='b', linewidth=5.0, linestyle='-')
# # handles 控制图例中要说明的线
# # labels 为两条线分别取一个 label
# # loc 控制图例的显示位置，一般用 best，由代码为我们选择最优的位置即可
# plt.legend(handles=[l1, l2], labels=["test1", "test2"], loc='best')
# # 限制 x 轴的显示范围
# plt.xlim((-1, 2))
# # 限制 y 轴的显示范围
# plt.ylim((-1, 5))
# # 给 x 轴加描述
# plt.xlabel("xxxxxx")
# # 给 y 轴加描述
# plt.ylabel("yyyyyy")
#
# # 替换一下横坐标的显示
# temp = np.linspace(-2, 2, 11)
# plt.xticks(temp)
# # 替换纵坐标的标签，用 level0 代替之前的-1
# plt.yticks([-1, 0, 1, 2, 3, 4, 5], ["level0", "level1", "level2", "level3",
# "level4", "level5", "level6"])
#
# plt.show()


# 7、为图像添加描述
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.lines import lineStyles

# x = np.linspace(-3,3,100)
# y1 = x * 2
# y2 = x ** 2
# plt.figure(figsize=(6,6))
# plt.plot(x,y1,color='r',linewidth=1.0,linestyle='-')
# # plt.plot(x,y2,color='r',linewidth=1.0,linestyles='--')
# # 给 x 轴加描述
# plt.xlabel("xxxxxx")
# # 给 y 轴加描述
# plt.ylabel("yyyyyy")
# x0 = 0.5
# y0 = x0 * 2
# # scatter 是画点的方法
# plt.scatter(x0,y0,color='g',s=50)
# # 画线
# # 这条线是第一个点的坐标为[x0,y0],第二个点的坐标为[x0,-6]，后面就是设置线的风格，线的颜色，线的宽度
# plt.plot([x0,x0],[y0,-6],color='k',linestyle='--',linewidth=1.0)
#
# # 画箭头和描述
# # xy 代表我们的点
# # xytext 代码我们描述的位置，基于当前的点，在 x 轴+30，在 y 轴-30
# # r'$2*x={n}$是我们要显示的文字信息，格式必须要这样
# # textcoords 表示作为起点
# # fontsize 表示设置字体大小
# # arrowprops 设置箭头
# # arrowstyle 设置箭头的样式
# # connectionstyle 设置风格.2 表示弧度
# plt.annotate(r'$2*0.5={n}$'.format(n = y0),xy=(x0,y0),xytext=(+30,-
# 30),textcoords='offset points',fontsize=10,arrowprops=dict(arrowstyle='->',
# connectionstyle='arc3,rad=.2'))
#
# # 显示文字描述，从 x 轴为-1，y 轴为 2 开始显示，$$中就是要显示的字符，这里如果要显示空格，则需要转义
# # fontdict 设置字体
# plt.text(-1,2,r'$1\ 2\ 3\ 4$',fontdict={"size":16,"color":"r"})
#
# plt.show()


# 8、一张画布显示多张图像
# plt.figure()
# # 有一个两行两列的单元格，这个位于第一个单元格
# plt.subplot(2,2,1)
# # 画一条[0,0][1,1]的直线
# plt.plot([0,1],[0,1])
# plt.subplot(2,2,2)
# plt.plot([0,1],[0,1])
# # 有一个两行两列的单元格，这个位于第三个单元格
# plt.subplot(2,2,3)
# # 画一条[0,1][1,0]的直线
# plt.plot([1,0],[0,1])
# plt.show()


plt.figure()
# 有一个两行三列的单元格，这个位于第一个单元格
plt.subplot(2,1,1)
# 画一条[0,0][1,1]的直线
plt.plot([0,1],[0,1])

# 有一个两行三列的单元格，这个位于第四个单元格，因为第一个单元格占 3 个位子，所以这里就是第四个
plt.subplot(2,3,4)
# 画一条[0,0][1,1]的直线
plt.plot([0,1],[0,1])
# 有一个两行三列的单元格，这个位于第五个单元格
plt.subplot(2,3,5)
# 画一条[0,1][1,0]的直线
plt.plot([1,0],[0,1])

plt.show()